/*
* INSANE - Interactive Structural Analysis Environment
*
* Copyright (C) 2003-2005
* Universidade Federal de Minas Gerais
* Escola de Engenharia
* Departamento de Engenharia de Estruturas
* 
* Author's email :    insane@dees.ufmg.br
* Author's website :  http://www.dees.ufmg.br/insane
* 
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
* 
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
package br.ufmg.dees.insane.model.femModel.problemDriver;

import br.ufmg.dees.insane.model.femModel.element.Element;
import br.ufmg.dees.insane.util.IMatrix;
import br.ufmg.dees.insane.util.IVector;

/**  
 * A class defining a problem driver
 * AX" + BX' + CX = R - F
 *
 * @author Camara, Luciana & Pitangueira, Roque
 * @since May 2005
 */
public interface ProblemDriver {
	
  /** Mount the problem equation's matrix A
   * @return a matrix with the A values
   */
  public IMatrix getA(Element e);
  
  /** Mount the problem equation's matrix B
   * @return a matrix with the B values
   */
  public IMatrix getB(Element e);

  /** Mount the problem equation's matrix C
   * @return a matrix with the C values
   */
  public IMatrix getC(Element e);
  
  /** Mount the problem equation's matrix R
   * @return a matrix with the R values
   */
  public IVector getE(Element e);
  
  /** Mount the problem equation's matrix F
   * @return a matrix with the F values
   */
  public IVector getF(Element e);
  
  /** Mount the problem equation's incremental matrix A
   * @return a matrix with the A values
   */
  public IMatrix getIncrementalA(Element e);
  
  /** Mount the problem equation's incremental matrix B
   * @return a matrix with the B values
   */
  public IMatrix getIncrementalB(Element e);

  /** Mount the problem equation's incremental matrix C
   * @return a matrix with the C values
   */  
  public IMatrix getIncrementalC(Element e);
  
  /** Mount the problem equation's total matrix A
   * @return a matrix with the A values
   */  
  public IMatrix getTotalA(Element e);
  
  /** Mount the problem equation's total matrix B
   * @return a matrix with the B values
   */
  public IMatrix getTotalB(Element e);

  /** Mount the problem equation's total matrix C
   * @return a matrix with the C values
   */
  public IMatrix getTotalC(Element e);
  
  /** A method to obtain a descritive text for the state variable
   * @return a String with the State Variable
   */
  public String getStateVariableLabel();
  
  /** A method to obtain a descritive text for the dual variable
   * @return a String with the Dual Variable
   */
  public String getDualVariableLabel();
  
  /** A method to obtain a descritive text for the internal variable
   * @return a String with the internal Variable
   */
  public String getInternalVariableLabel();
  
  /** A method to obtain a descritive text for the internal dual variable
   * @return a String with the internal dual Variable
   */
  public String getInternalDualVariableLabel();
  
  /** A method to obtain a descritive text for the material point internal variable
   * @return a String with the material point internal Variable
   */
  public String getMPInternalVariableLabel();
  
  /** A method to obtain a descritive text for the material point internal dual variable
   * @return a String with the material point internal dual Variable
   */
  public String getMPInternalDualVariableLabel();
  
  /** A method to obtain a descritive text for the unknown dual variable
   * @return a String with the State Variable
   */
  public String getUnknownDualVariableLabel();

}// end of problem  driver
